﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace snat.algorithms {

    /// <summary>
    /// Delegate type for events to be used in cross-communicating algorithms
    /// </summary>
    /// <param name="name">The algorithm that threw the event</param>
    public delegate void AlgorithmProcessed(IAlgorithm algorithm);

    public interface IAlgorithm {

        /// <summary>
        /// Identifying name for the algorithm
        /// </summary>
        /// <remarks>Shown on GUI textual output as title for algorithm</remarks>
        String Name { get; }

        /// <summary>
        /// Register method for algorithm, should include code to add algorithm's methods to network model events
        /// </summary>
        void Register();

        /// <summary>
        /// DeRegister method for algorithm, should include code to remove algorithm's methods from network model events
        /// </summary>
        void DeRegister();

    }
}
